#include "store_report.h"

struct Args{
    thread_queue<lars::ReportStatusRequest>* queue;
    Store_Report* sr;
};


// 从消息队列中取出数据，进行mysql入库
void thread_report(event_loop *loop, int fd, void *args){
    thread_queue<lars::ReportStatusRequest>* queue = (thread_queue<lars::ReportStatusRequest>*)(((Args*)args)->queue);
    Store_Report* sr = (Store_Report*)(((Args*)args)->sr);

    // 从队列中取出数据
    std::queue<lars::ReportStatusRequest> report_msg;
    queue->recv(report_msg);

    while(!report_msg.empty()){
        // 获取其中的每一个元素
        lars::ReportStatusRequest msg = report_msg.front();
        report_msg.pop();

        sr->store(msg);
    }
    
}

// 每个存储数据的线程业务
void* store_main(void* args){
    Args callback_args;
    
    thread_queue<lars::ReportStatusRequest>* queue = (thread_queue<lars::ReportStatusRequest>*)args;
    callback_args.queue = queue;
    
    // 定义一个处对象用于长连接
    Store_Report sr;
    callback_args.sr = &sr;

    // 设定一个loop监控queue中的数据
    event_loop loop;
    queue->set_loop(&loop);

    // 设置读函数
    queue->set_callback(thread_report, &callback_args);

    loop.event_process();
    
    return NULL;
}